<?php

namespace app\common\business;

use app\common\lib\Str;
use think\facade\Cache;
use think\Exception;

class Student
{
    public $studentObj = null;
    public $study_reportObj = null;

    public function __construct()
    {
        $this->studentObj = new \app\common\model\Student();
        $this->study_reportObj = new \app\common\model\StudyReport();
    }

    public function student($data)
    {
        $result = $this->studentObj->student($data);
        foreach ($result as $key => $value) {
            $value['sign_in'] = json_decode($value['sign_in'], true);
            $result[$key] = $value;
        }
        return $result;
    }

    public function add_student($data)
    {
        return $this->studentObj->save($data);
    }

    public function del_student($id)
    {
        return $this->studentObj::destroy($id);;
    }

    public function edit_student($data)
    {
        return $this->studentObj::update($data);
    }

    public function updatePassword($data)
    {
        $data['password'] = md5($data['password'] . config('common.md5_str'));
        return $this->studentObj::update($data);
    }

    public function sign_in_student($ids, $re_sign_in_date)
    {
        $sign_in_date = '';
        $create_time = '';
        if (empty($re_sign_in_date)) {
            $sign_in_date = formatTimestamp(time());
            $create_time = time();
        } else {
            $sign_in_date = formatTimestamp($re_sign_in_date / 1000);
            $create_time = $re_sign_in_date / 1000;
        }
        // 根据主键获取多个数据
        $list = $this->studentObj::select($ids);

        $student_savell_arr = [];
        $study_report_savell_arr = [];
        // 对数据集进行遍历操作
        foreach ($list as $student) {
            $sign_in = [];
            if (!empty($student->sign_in)) {
                $sign_in = json_decode($student->sign_in);
            }
            if (!in_array($sign_in_date, $sign_in)) {
                $sign_in[] = $sign_in_date;
                $student_savell_arr[] = [
                    'id' => $student->id,
                    'sign_in' => json_encode($sign_in),
                ];

                $arr1 = [
                    '‌学习态度积极',
                    '上课认真听讲',
                    '‌学习认真',
                    '课堂参与度高',
                    '‌课后能够自觉复习和总结学习内容',
                    '学习态度认真负责',
                    '‌学习目标清晰',
                    '‌学习兴趣广泛',
                    '对待作业认真负责',
                    '‌善于团队合作',
                    '‌学习态度积极向上',
                    '能够自主学习',
                    '学习认真负责',
                    '‌对待学习有恒心和毅力',
                    '‌学习自制力强',
                    '‌乐于分享学习经验和知识',
                    '‌课堂上活跃表现出较高的学习积极性和学习热情',
                    '对待学习态度端正',
                    '‌对学习充满热情',
                    '‌对自己的学习目标有清晰的认识',
                    '‌无论面对什么样的困难和挑战',
                    '能够自觉遵守学习纪律',
                    '‌对知识和世界充满好奇心',
                    '对学习充满热情',
                    '能够正确对待自己的错误',
                    '能够积极参与老师布置的任务活动',
                    '能够快速掌握新知识',
                    '思维敏捷',
                    '记忆力出色，能够快速、准确地记住大量的知识点和概念。',
                    '具有良好的分析问题的能力',
                    '具有较强的创造力',
                    '能够迅速准确地找到问题的解决方法',
                    '具有较强的学习能力',
                    '具有较为全面的综合能力',
                ];
                $arr2 = [
                    '‌对学习内容充满兴趣',
                    '‌按时完成任务',
                    '课堂上注意力集中',
                    '‌面对困难不轻易放弃',
                    '‌乐于接受新知识和不同观点',
                    '‌积极贡献，尊重他人意见',
                    '‌通过互助学习提升自身能力',
                    '‌善于思考和发现问题',
                    '能够专心致志地听老师讲解内容',
                    '‌面对困难，态度积极',
                    '积极提问、回答问题',
                    '‌做到学有所获',
                    '不轻易放弃',
                    '‌有计划地学习',
                    '喜欢探索新知识',
                    '能够按时、按要求完成作业',
                    '‌能够积极参与团队合作项目',
                    '‌能够从错误中吸取教训',
                    '认真听老师讲课',
                    '态度端正',
                    '‌遇到困难不气馁',
                    '‌能够合理安排时间',
                    '‌与同学们相互学习和交流',
                    '‌课堂上活跃表现出较高的学习积极性和学习热情',
                    '尊重师长，尊重同学',
                    '‌乐于主动去探索和解决问题，能够积极参与课堂讨论和活动',
                    '‌明确知道自己想要达到什么样的成绩或获得什么样的能力',
                    '‌能够坚持下去，不轻易放弃。能够克服学习中的障碍',
                    '按时完成学习任务，并合理安排时间，避免拖延和浪费',
                    '勇于探索和发现。对于学习中的问题，善于思考和提问',
                    '愿意付出努力去学习新知识和技能',
                    '不因错误而气馁或沮丧',
                    '对老师布置的任务，有着积极的关心和关注',
                    '并能够灵活运用',
                    '能够快速分析和解决问题',
                    '能够快速、准确地记住大量的知识点和概念',
                    '能够抓住问题的本质和关键点，进行深入剖析和思考',
                    '能够在学习和思考中提出新颖的见解和观点，能够运用已有的知识和技能创造出新的东西',
                    '并能够有效地解决问题',
                    '能够迅速适应不同的学习环境和方式，能够有效地获取各种学习资源，提高自己的学习效果和效率',
                    '在人际交往、团队合作等方面都有一定的才能和潜力',
                ];
                $arr3 = [
                    '‌遇到问题主动寻求解决方法，而非逃避',
                    '能长时间专注于任务，减少外界干扰',
                    '‌愿意反复尝试并从中吸取经验',
                    '‌勇于提问和挑战自我',
                    '‌愿意分享自己的见解',
                    '‌而非单纯竞争',
                    '‌能够主动主动解决问题，是一个学习榜样',
                    '及时记录重要知识点。',
                    '‌能够坚持不懈，努力克服困难，取得进步',
                    '为课堂带来积极的氛围。',
                    '‌掌握知识要点',
                    '能够按时完成作业和任务',
                    '‌分配时间合理，避免拖延症状',
                    '能够主动学习和钻研自己感兴趣的领域',
                    '不敷衍了事',
                    '‌与同学们共同完成任务',
                    '‌不断完善自己的学习方法和技巧',
                    '还能自主探究和学习',
                    '能够遵守课堂的学习纪律和规定',
                    '‌能够坚持到底',
                    '‌避免被其他无关事物干扰分散注意力',
                    '团结友爱，与他人和谐相处',
                    '‌主动与老师和同学沟通交流，对自己的学习充满信心',
                    '在学习过程中，能够制定合理的学习计划，并按照计划有条不紊地进行学习',
                    '‌迎接新的挑战，始终保持对学习的热情',
                    '能够自我约束，不受外界干扰，专心致志地投入到学习中',
                    '积极主动地寻求答案和解决方法。善于利用各种资源和途径，扩大自己的知识面',
                    '喜欢学习的过程，享受学习的乐趣，并能够从学习中获得满足感和成就感',
                    '能够从错误中吸取经验和教训，及时修改和改进自己的学习方法和策略，以提高学习效果',
                    '能够与同学和老师友好相处，建立良好的人际关系',
                    '对于学习重点和难点有敏锐的把握能力，能够迅速找到重点和要点，并能够理解和掌握相关的概念、原理和方法',
                    '能够运用逻辑推理、归纳演绎等思维方法，进行整体思考和创新思维，能够运用多种角度和方法来看待问题，并能够做出合理的判断和决策',
                    '能够有效运用记忆方法和技巧，提高记忆效率和质量，能够将学过的知识长时间保持在记忆中',
                    '有较强的问题解决能力。能够通过分析和归纳，找到问题的解决办法，并能够运用相关知识和技能进行实践',
                    '乐于尝试新的方法和途径，勇于创新和突破',
                    '能够灵活运用所学的知识和技能，去解决各种实际问题，并能够从问题中学习和成长',
                    '能够学习新的学科和领域，不断丰富自己的知识和技能',
                    '能够全面发展自己，不断提高自己的综合素质',
                ];

                $comment = [
                    'dong_shou' => rand(5, 8),
                    'kang_cuo' => rand(5, 8),
                    'chuang_xin' => rand(5, 8),
                    'kong_jian_su_zao' => rand(5, 8),
                    'gou_tong_biao_da' => rand(5, 8),
                    'comment' => $arr1[array_rand($arr1)].'，'. $arr2[array_rand($arr2)].'，'. $arr3[array_rand($arr3)],
                ];
                $study_report_savell_arr[] = [
                    'student_id' => $student->id,
                    'create_time' => $create_time,
                    'comment' => json_encode($comment),
                ];
            }
        }


        //学生表 批量更新数据
        $this->studentObj->saveAll($student_savell_arr);
        //学习报告表 批量插入数据
        $this->study_reportObj->saveAll($study_report_savell_arr);

        return true;
    }

    public function student_one($id)
    {
        return $this->studentObj::find($id);
    }


    public function login($data)
    {

//        根据用户名和密码，查询表是否有记录
        $data['password'] = md5($data['password'] . config('common.md5_str'));
        $student = $this->studentObj->getStudent($data);
        if (empty($student)) {
            throw new Exception('学生不存在或密码错误');
        } else {
            try {
                $token = getRandStr($data['name']);
                $redisData = [
                    'id' => $student->id,
                    'name' => $student->name,
                ];
                try {
                    Cache::set(config('common.token_pre') . $token, $redisData, userLoginExpiresTime());
                    return ['token' => $token, 'name' => $student->name];
                } catch (Ex $e) {
                    throw new Exception('服务器错误内部');
                }
            } catch (Ex $e) {
                throw new Exception('服务器错误内部');
            }
        }
    }


    // 退出登陆
    public function logout($id, $token)
    {
        $student = $this->studentObj->getStudent(['id' => $id]);
        if (empty($student)) {
            throw new Exception('学生不存在');
        } else {
            try {
                return Cache::set(config('common.token_pre') . $token, NULL);
            } catch (Ex $e) {
                throw new Exception('服务器错误内部');
            }
        }
    }


    // 学生信息
    public function get_info($id)
    {
        return $this->studentObj->getStudent(['id' => $id]);
    }

}